package com.zmz.DateTest;


import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;

/**
 * Create with IntelliT IDEA
 *
 * @Author: zhengmingzhe
 * @Date: 2022/11/16/10:52
 * @Description: 获取上个季度起始时间, 截止时间
 * 上季度时间 where quarter(时间1) =(（quarter(NOW())+2）%4+1)
 */
public class QuarterTime {
    public static void main(String[] args) {
        getQuarterTime();
//        getLocalDate();
    }

    /*
     * @Description  获取上个季度起始时间, 截止时间(目前有问题如果跨年了年份得减一)
     * @Param
     * @return
     **/
    public static void getQuarterTime() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDate nowDate = LocalDate.now();
        // 当前月份减去 3 个月，即落在上个季度中，通过 firstMonthOfQuarter 获取所在季度第一个月
        Month firstMonthOfQuarter = nowDate.minusMonths(3).getMonth().firstMonthOfQuarter();
        // 所在季度第一个月加上 2，即为上季度最后一个月
        Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
        // 获得上面得到的季度第一个月的第一天
        LocalDate beginDate = LocalDate.of(nowDate.getYear(), firstMonthOfQuarter, 1);
        // 获得上面得到的季度最后一个月的最后一天
        LocalDate endDate = LocalDate.of(nowDate.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(beginDate.isLeapYear()));
        // 获取季度开始时间
        LocalDateTime beginTime = LocalDateTime.of(beginDate, LocalTime.MIN);
        // 获取季度结束时间
        LocalDateTime endTime = LocalDateTime.of(endDate, LocalTime.MAX);
        System.out.println("上个季度开始日期：" + beginDate);
        System.out.println("上个季度结束日期：" + endDate);
        System.out.println("上个季度开始时间：" + beginTime.format(dateTimeFormatter));
        System.out.println("上个季度结束时间：" + endTime.format(dateTimeFormatter));
    }

    public static String getLocalDate() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime localDateTime = LocalDateTime.now();
        String formatLoacalDate = dateTimeFormatter.format(localDateTime);
        System.out.println(localDateTime.toString());
        System.out.println(formatLoacalDate);
        return localDateTime.toString();
    }

    /*
     * @Description 获取上个月第一天和最后一天
     * @Param
     * @return
     **/
    public static void getMonthSection() {        //月第一天

    }
}
